脚本输入(Script Inputs)
脚本输入(Script Inputs)是脚本与 Rive 编辑器之间的桥梁,使你可以通过自定义输入字段来配置并控制脚本行为。
通过定义输入,你可以暴露数字、颜色、布尔值、画板组件等可配置属性,这些属性会直接显示在 Rive UI 中。这样你可以复用同一脚本逻辑,并在不同实例中使用不同配置。
定义输入(Define Inputs)
要创建脚本输入,请在类型中声明,并在返回函数中提供默认值。
-- Define the script's data and inputs.
-- These properties will be available in `self`
type MyNode = {
myNumber: Input<number>,
myColor: Input<Color>,
-- This input expects a View Model named Points
myViewModel: Input<Data.Points>,
-- This input expects an Artboard with a View Model named Points
myArtboard: Input<Artboard<Data.Points>>,
-- This will be accessible via self, but not in the inputs panel
myString: string,
}
function init(self: SnakeGame): boolean
print("myString", self.myString)
print("myNumber", self.myNumber)
print("myColor", self.myColor)
print("myViewModel value", self.myViewModel.someString.value)
print("myViewModel value", self.myArtboard.data.someEnum.value)
return true
end
return function(): Node<MyNode>
return {
init = init,
draw = draw,
myString = "Rive for president!"
-- Sets default value when creating a new instance of the script
-- This will be overridden by a value set in the script's inputs
myNumber = 0,
myColor = Color.rgba(255, 255, 0, 255), -- 0xFFFFFF00
-- Use late() to mark this input as assigned at runtime
myViewModel = late(),
myArtboard = late()
}
end
设置输入值(Set Input Values)
在层级面板(Hierarchy)中选择 节点(Node) 或 布局脚本(Layout Scripts) 的组件,或在数据面板选择 转换器脚本(Converter Scripts),即可在右侧侧栏配置输入。

数据绑定输入(Data Binding Inputs)
你可以使用数据绑定(Data Binding)在运行时驱动输入值。
说明(Note) 输入可以控制脚本, 但脚本不能反向修改输入值。
如果你需要从脚本控制视图模型属性,请通过上下文(Context)或视图模型输入(View Model Inputs)访问视图模型。
在右侧边栏中对输入字段右键,选择 Data Binding 并绑定属性。

监听输入变化(Listen for Input Changes)
当任意输入变化时,update 会触发:
function update(self: MyNode)
print('An update changed')
end
也可以监听单个属性:
function handleMyStringChanged()
print('myString changed!')
end
function handleMyNumberChanged(myNumber: number)
print('myNumber changed!', myNumber)
end
function init(self: MyApp): boolean
-- handleMyStringChanged fires when self.myString changes
local myString = self.myString
myString:addListener(handleMyStringChanged)
-- Pass a parameter to the handleMyStringChanged callback
local myNumber = self.myNumber
myNumber:addListener(myNumber.value, handleMyNumberChanged)
return true
end
视图模型输入(View Model Inputs)
视图模型输入让脚本可读写视图模型属性,这些属性可通过数据绑定驱动场景任意元素。
说明(Note) 在脚本中访问视图模型最简单的方式通常是通过上下文(Context)。
设置视图模型
示例中:
Main视图模型有character属性character本身是Character视图模型Character内有两个数字属性(x、y)供脚本控制

定义视图模型输入
在脚本中声明与目标嵌套视图模型匹配的输入类型:Data.<ViewModelName>。
type MyNode = {
-- This input expects a view model instance of type Character
character: Input<Data.Character>
}
return function(): Node<MyNode>
return {
init = init,
advance = advance,
draw = draw,
-- Initialize with `late()` so the value
-- can be provided by the editor at runtime.
character = late(),
}
end
在编辑器连接输入
- 在场景中选中脚本(或转换器)
- 在右侧边栏找到属性分组
- 为
character输入选择绑定目标 - 从 Main 视图模型中选择嵌套
character

读取与写入视图模型属性
function moveCharacter(self: MyNode)
print('Current x: ', self.character.x.value)
self.character.x.value = 10
end
因为 character 是视图模型实例,你可直接访问其公共属性:
self.character.<propertyName>.value